/**
 * HTTP请求工具类
 */
class Http {
  // 构造方法
  constructor() {
    // 基础URL
    this.baseUrl = 'http://127.0.0.1:8083/zhifou-blog';
    // 超时时间(毫秒)
    this.timeout = 15000;
  }
    /**
   * 设置基础URL
   * @param {string} baseUrl 基础URL
   */
  setBaseUrl(baseUrl) {
    this.baseUrl = baseUrl;
  }
  /**
   * 设置超时时间
   * @param {number} timeout 超时时间(毫秒)
   */
  setTimeout(timeout) {
    this.timeout = timeout;
  }

    /**
   * 发送请求
   * @param {string} method 请求方法
   * @param {string} url 请求URL
   * @param {object} data 请求参数
   * @param {object} header 请求头
   */
  request(method, url, data, header) {
    // 合并默认请求头
    const defaultHeader = {
      'content-type': 'application/json'
    };
    const finalHeader = { ...defaultHeader, ...header };
    // 构建完整URL
    const fullUrl = this.baseUrl + url;

    // 返回Promise对象
    return new Promise((resolve, reject) => {
      wx.request({
        url: fullUrl,
        method: method,
        data: data,
        header: finalHeader,
        timeout: this.timeout,
        success: (res) => {
          // 请求成功
          if (res.data.code ==200) {
            resolve(res.data);
          } else {
            // 请求失败
            reject({
              statusCode: res.data.code,
              data: res.data,
              message: `请求失败，状态码：${res.data.code}`
            });
          }
        },
        fail: (err) => {
          // 请求失败
          reject({
            message: '网络请求失败',
            error: err
          });
        }
      });
    });
  }

  /**
   * 发送GET请求
   * @param {string} url 请求URL
   * @param {object} data 请求参数
   * @param {object} header 请求头
   */
  get(url, data = {}, header = {}) {
    return this.request('GET', url, data, header);
  }

  /**
   * 发送POST请求
   * @param {string} url 请求URL
   * @param {object} data 请求参数
   * @param {object} header 请求头
   */
  post(url, data = {}, header = {}) {
    return this.request('POST', url, data, header);
  }

  /**
   * 发送PUT请求
   * @param {string} url 请求URL
   * @param {object} data 请求参数
   * @param {object} header 请求头
   */
  put(url, data = {}, header = {}) {
    return this.request('PUT', url, data, header);
  }

  /**
   * 发送DELETE请求
   * @param {string} url 请求URL
   * @param {object} data 请求参数
   * @param {object} header 请求头
   */
  delete(url, data = {}, header = {}) {
    return this.request('DELETE', url, data, header);
  }

}

// 导出单例
export default new Http();
